// components/login-modal/login-modal.js
Component({
  properties: {
    show: {
      type: Boolean,
      value: false
    }
  },

  data: {
    isLoading: false,
    showNicknameInput: false,
    customNickname: '',
    wxUserInfo: null,
    wxCode: null,
    inputMethod: 'custom', // 输入方式：custom-自定义输入，preset-预设选择
    presetNicknames: ['妈妈', '爸爸', '爷爷', '奶奶', '哥哥', '姐姐', '弟弟', '妹妹']
  },

  methods: {
    // 关闭弹框
    onClose() {
      this.triggerEvent('close')
    },

    // 阻止事件冒泡
    stopPropagation() {
      // 阻止事件冒泡，防止点击弹框内容时关闭弹框
    },

    // 处理合并后的登录
    handleMergedLogin() {
      if (!this.data.customNickname || this.data.customNickname.length < 2) {
        wx.showToast({
          title: '昵称至少2个字符',
          icon: 'none'
        })
        return
      }

      this.setData({ isLoading: true })
      
      // 直接获取微信用户信息并登录
      this.getUserInfoAndLogin()
    },

    // 处理登录
    handleLogin() {
      this.setData({ isLoading: true })
      
      // 先获取微信用户信息，然后显示昵称输入
      this.getUserInfoAndLogin()
    },

    // 获取用户信息并登录
    getUserInfoAndLogin() {
      wx.getUserProfile({
        desc: '用于完善用户资料',
        success: (res) => {
          const userInfo = res.userInfo
          
          // 保存微信用户信息
          this.setData({
            wxUserInfo: userInfo
          })
          
          // 自动进行微信登录获取code
          this.wxLogin(userInfo)
        },
        fail: (err) => {
          console.log('获取用户信息失败', err)
          if (err.errMsg.includes('getUserProfile:fail auth deny')) {
            wx.showModal({
              title: '需要授权',
              content: '为了提供更好的服务，需要获取您的头像和昵称信息',
              confirmText: '重新授权',
              cancelText: '取消',
              success: (res) => {
                if (res.confirm) {
                  // 用户点击重新授权，再次调用
                  this.getUserInfoAndLogin()
                } else {
                  this.setData({ isLoading: false })
                }
              }
            })
          } else {
            wx.showToast({
              title: '获取用户信息失败',
              icon: 'none'
            })
            this.setData({ isLoading: false })
          }
        }
      })
    },

    // 微信登录
    wxLogin(userInfo) {
      wx.login({
        success: (res) => {
          if (res.code) {
            console.log('微信登录成功，code:', res.code)
            // 保存微信登录code，直接创建用户
            this.setData({ wxCode: res.code })
            
            // 直接创建用户并登录
            this.createUserAndLogin(userInfo, res.code)
          } else {
            console.error('微信登录失败:', res)
            this.setData({ isLoading: false })
            wx.showToast({
              title: '微信登录失败',
              icon: 'none'
            })
          }
        },
        fail: (err) => {
          console.error('微信登录失败:', err)
          this.setData({ isLoading: false })
          wx.showToast({
            title: '微信登录失败',
            icon: 'none'
          })
        }
      })
    },

    // 创建用户并登录
    async createUserAndLogin(userInfo, code) {
      try {
        const app = getApp()
        
        // 调用应用的登录方法
        const loginResult = await app.handleWxLogin(userInfo, code, this.data.customNickname)
        
        if (loginResult.success) {
          wx.showToast({
            title: '登录成功',
            icon: 'success'
          })
          
          // 登录成功后关闭弹框并通知父组件
          this.triggerEvent('loginSuccess')
          this.onClose()
        } else {
          wx.showToast({
            title: loginResult.error || '登录失败',
            icon: 'none'
          })
        }
      } catch (error) {
        console.error('创建用户失败:', error)
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        })
      } finally {
        this.setData({ isLoading: false })
      }
    },

    // 昵称输入
    onNicknameInput(e) {
      this.setData({
        customNickname: e.detail.value
      })
    },

    // 选择预设昵称
    selectPresetNickname(e) {
      const nickname = e.currentTarget.dataset.nickname
      this.setData({
        customNickname: nickname,
        inputMethod: 'preset'
      })
    },

    // 切换输入方式
    toggleInputMethod() {
      this.setData({
        inputMethod: this.data.inputMethod === 'custom' ? 'preset' : 'custom'
      })
    }
  }
}) 